package br.com.bancodecurriculos.pessoa.fisica.dominio;

import java.util.Date;
import java.util.List;

import org.brazilutils.br.cpfcnpj.Cpf;

import br.com.bancodecurriculos.controleacesso.dominio.Usuario;
import br.com.bancodecurriculos.pessoa.comum.dominio.Email;
import br.com.bancodecurriculos.pessoa.comum.dominio.Endereco;
import br.com.bancodecurriculos.pessoa.comum.dominio.Pessoa;
import br.com.bancodecurriculos.pessoa.comum.dominio.Telefone;

public class PessoaFisica extends Pessoa {

	private String cpf;
	private Date dataNascimento;
	private char sexo;
	private EstadoCivil estadoCivil;

	public PessoaFisica() {

	}

	public PessoaFisica(Usuario usuario, String nome, String cpf,
			Date dataNascimento, char sexo, List<Endereco> enderecos,
			List<Telefone> telefones, List<Email> emails,
			EstadoCivil estadoCivil) {
		super(usuario, nome, enderecos, telefones, emails);
		this.cpf = cpf;
		this.dataNascimento = dataNascimento;
		this.sexo = sexo;
		this.estadoCivil = estadoCivil;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public char getSexo() {
		return sexo;
	}

	public void setSexo(char sexo) {
		this.sexo = sexo;
	}

	public EstadoCivil getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(EstadoCivil estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public enum EstadoCivil {
		SOLTEIRO("Solterio"), CASADO("Casado"), DIVORCIADO("Divorciado");

		private String nome;

		EstadoCivil(String nome) {
			this.nome = nome;
		}

		public String getNome() {
			return this.nome;
		}

		public static EstadoCivil getEstadoCivil(String nome) {
			if (EstadoCivil.SOLTEIRO.getNome().equals(nome)) {
				return EstadoCivil.SOLTEIRO;
			} else if (EstadoCivil.CASADO.getNome().equals(nome)) {
				return EstadoCivil.CASADO;
			} else if (EstadoCivil.DIVORCIADO.getNome().equals(nome)) {
				return EstadoCivil.DIVORCIADO;
			} else {
				return null;
			}
		}
	}

	public boolean validarCPF() {
		if (Cpf.isValid(this.cpf)) {
			return true;
		}
		return false;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PessoaFisica other = (PessoaFisica) obj;
		if (cpf == null) {
			if (other.cpf != null)
				return false;
		} else if (!cpf.equals(other.cpf))
			return false;
		return true;
	}

}
